package middleware

import (
	"github.com/gin-contrib/cors" // 导入Gin框架的CORS中间件扩展
	"github.com/gin-gonic/gin"    // 导入Gin框架核心包
	"time"                        // 导入时间包，用于设置缓存时间
)

// CORS 创建跨域资源共享(CORS)中间件
// 功能：处理浏览器的跨域请求限制，允许前端VuePress等应用访问后端API
// 返回值：gin.HandlerFunc - 符合Gin框架规范的中间件函数
func CORS() gin.HandlerFunc {
	// 使用cors.New()创建CORS中间件，传入配置结构体
	return cors.New(cors.Config{
		// 允许的源地址列表
		// 前端应用的URL，开发环境通常为localhost:8080
		// 生产环境需替换为实际的前端域名（如"https://blog.example.com"）
		AllowOrigins: []string{"http://localhost:8080"},

		// 允许的HTTP方法列表
		// 涵盖常见的RESTful API方法，包括预检请求的OPTIONS方法
		AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},

		// 允许的请求头列表
		// - Origin: 源地址头，跨域请求必带
		// - Content-Type: 内容类型头（如application/json）
		// - Authorization: 认证头（用于JWT等身份验证）
		AllowHeaders: []string{"Origin", "Content-Type", "Authorization"},

		// 是否允许发送Cookie等凭据信息
		// 设置为true时，前端请求需配置withCredentials: true
		AllowCredentials: true,

		// 预检请求(OPTIONS)的结果缓存时间
		// 240小时内重复的跨域请求无需再次发送预检请求，提升性能
		MaxAge: 240 * time.Hour,
	})
}
